package uy.org.softtech.cssuite.entidad;

import static javax.xml.bind.annotation.XmlAccessType.FIELD;

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlTransient;

import org.codehaus.jackson.annotate.JsonIgnore;

/**
 * Clase abstracta que contiene la definición de los campos comunes a todas las entidades 
 * que son traducibles a otros idiomas utilizando un archivo de traduccion (.properties).
 * 
 * @author fabian.lobo
 */
@MappedSuperclass
@XmlAccessorType(FIELD)
@XmlSeeAlso({Entidad.class})
@XmlTransient
public abstract class EntidadTraducible extends Entidad {
	
	@Column(name = "CODIGO", length = 100)
	@JsonIgnore
	@XmlTransient
	private String codigo;
	
	@Column(name = "DESCRIPCION", length = 255, nullable = false)
	@XmlElement(name = "descripcion", namespace = SISTEMAS_NAMESPACE, required = true)
	private String descripcion;
	
	@Column(name = "TRADUCIBLE")
	@JsonIgnore
	@XmlTransient
	private boolean traducible = false;

	/*
	 *  GETTERS
	 */
	public String getCodigo() {
		return codigo;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public boolean isTraducible() {
		return traducible;
	}

	/*
	 *  SETTERS
	 */
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	public void setTraducible(boolean traducible) {
		this.traducible = traducible;
	}

	/*
	 * 	METODOS
	 */
	
	@Override
	public abstract int hashCode();

	@Override
	public abstract boolean equals(Object obj);

	@Override
	public abstract String toString();

	@Override
	public abstract String toString(boolean incluirColecciones);

}
